<template>
  <el-card shadow="never" style="margin-bottom: 0">
    <template #header> 访问来源 </template>

    <div ref="divRef" style="width: 100%; height: 300px"></div>
  </el-card>
</template>

<script lang="ts">
import { defineComponent, ref, onMounted, watchEffect } from 'vue'
import useEcharts from '@/hooks/web/useEcharts'
import { EChartsOption } from 'echarts'

export default defineComponent({
  setup() {
    const divRef = ref<HTMLElement>()

    const options: EChartsOption = {
      tooltip: {
        trigger: 'item'
      },
      legend: {
        bottom: '1%',
        left: 'center'
      },
      series: [
        {
          color: ['#5ab1ef', '#b6a2de', '#67e0e3', '#2ec7c9'],
          name: '访问来源',
          type: 'pie',
          radius: ['40%', '70%'],
          avoidLabelOverlap: false,
          itemStyle: {
            borderRadius: 10,
            borderColor: '#fff',
            borderWidth: 2
          },
          label: {
            show: false,
            position: 'center'
          },
          emphasis: {
            label: {
              show: true,
              fontSize: '12',
              fontWeight: 'bold'
            }
          },
          labelLine: {
            show: false
          },
          data: [
            { value: 1048, name: '搜索引擎' },
            { value: 735, name: '直接访问' },
            { value: 580, name: '邮件营销' },
            { value: 484, name: '联盟广告' }
          ],
          animationType: 'scale',
          animationEasing: 'exponentialInOut',
          animationDelay: function () {
            return Math.random() * 100
          }
        }
      ]
    }

    onMounted(() => {
      const { setOptions } = useEcharts(divRef.value!)

      watchEffect(() => {
        setOptions(options)
      })
    })

    return {
      divRef
    }
  }
})
</script>

<style scoped></style>
